package com.kexio.security.domain.enums;

/**
 * 权限类型枚举
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public enum PermissionType {
    /**
     * 菜单权限
     */
    MENU(0, "菜单权限"),
    
    /**
     * 按钮权限
     */
    BUTTON(1, "按钮权限"),
    
    /**
     * API权限
     */
    API(2, "API权限"),
    
    /**
     * 数据权限
     */
    DATA(3, "数据权限");

    private final Integer code;
    private final String description;

    PermissionType(Integer code, String description) {
        this.code = code;
        this.description = description;
    }

    public Integer getCode() {
        return code;
    }

    public String getDescription() {
        return description;
    }

    /**
     * 根据编码获取类型
     * @param code 类型编码
     * @return 类型枚举
     */
    public static PermissionType fromCode(Integer code) {
        if (code == null) {
            return null;
        }
        for (PermissionType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        throw new IllegalArgumentException("无效的权限类型编码: " + code);
    }

    /**
     * 检查是否为菜单权限
     * @return 是否菜单权限
     */
    public boolean isMenu() {
        return this == MENU;
    }

    /**
     * 检查是否为按钮权限
     * @return 是否按钮权限
     */
    public boolean isButton() {
        return this == BUTTON;
    }

    /**
     * 检查是否为API权限
     * @return 是否API权限
     */
    public boolean isApi() {
        return this == API;
    }

    /**
     * 检查是否为数据权限
     * @return 是否数据权限
     */
    public boolean isData() {
        return this == DATA;
    }
}